JSONP 单点登录方案

流程图

接入示例

前端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>xxx 系统</title>
</head>
<body>
<script>
function users_callback(status, username, email, loginTime, aliveTime ,token, msg) {
if (status==="1"){
// TODO 用户已在 oss 登录成功
// 为保证过期时间一致,须将 cookie 过期时间设置为 aliveTime
document.cookie="token="+token;
console.log(username, email, loginTime, aliveTime, token);
// 请求后端接口,后端接口校验 token 有效性
}

// TODO 用户未在 oss 登录成功
console.log(msg);
}
</script>
<script type="text/javascript" src="http://xxx.com/api/oss/jsonp.js?callback=users_callback"></script>
</body>
</html>

后端

后端需调用 /api/oss/auth_token 验证 token 信息,该接口会返回用户基本信息。如系统和 oos 所用 redis 一致,那么可以不调用该接口进行验证,可直接在 redis 中进行验证【oss 系统 token 格式为 “oss:token值”,不推荐此种验证方式】。验证成功后业务系统可发放本地凭证,为了统一各系统,须将凭证过期时间设置为与 /api/oss/auth_token 接口中返回的 aliveTime 时间一致。

注意事项

  1. oss 登录成功后返回参数中会携带 redirect 参数,该参数的值为跳转 oos 登录页面所携带的 referrer 头信息

  2. /api/oss/jsonp.js 接口 callback 参数默认值为 callback, 接入系统可自定义回调函数,只需保持回调函数名称和逻辑处理函数名称一致即可

  3. /api/oss/jsonp.js 成功后,返回参数目前示例如下所示,为保证后续兼容性,回调函数参数需支持可变长参数。返回内容解释如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    users_callback(                             // 回调函数名称
    '1', // 请求认证状态 "1" 或 "0", "1" 代表成功
    '数据中心BI', // username
    'data.bi@huifu.com', // email
    '2020-07-21 17:48:47', // loginTime
    '2020-07-21 19:48:47', // aliveTime
    'oss:KH1hsLxzyVR8Ujqc673w', // token
    '' // msg
    )
  4. JSONP 接口需要判断请求发起方域名是否在允许 oss 登录的名单内